Основа гибкой системы заключается в определении строгого внутреннего договора или интерфейса, которому должны следовать объекты. В этом контексте мы определяем интерфейс таблицы где каждый объект ячейки гарантирует наличие трех конкретных методов: minWidth(), minHeight(), и draw(width, height).
1. Договор интерфейса
Стандартизируя эти методы, логика разметки может вычислять глобальные размеры строк и столбцов, не зная внутренних типов данных отдельных ячеек. Это классический пример полиморфизма на основе интерфейсов.
2. Реализация класса TextCell
Конструктор TextCell готовит исходные данные, разбивая строки на массивы построчно. Это переносит сложность с этапа отрисовки на этап создания экземпляра.
3. Определённая отрисовка
Конструктор draw(width, height) метод обеспечивает идеальное заполнение каждой выходной ячейки с помощью вспомогательной функции repeat() вспомогательной функции. Это сохраняет вертикальное и горизонтальное выравнивание независимо от длины содержимого.
$$\text{Заполнение} = \text{Ширина} - \text{длина строки}$$